package com.teamin.mapper;

import com.teamin.config.RmRule;
import com.teamin.entity.NetDisk;
import com.teamin.entity.NetDiskShare;
import com.teamin.entity.NetDiskShareFile;
import com.teamin.vo.FileFromVO;
import com.teamin.vo.NetDiskFoldersByParentIdVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 网盘Mapper
 * <p>
 * Created by e on 2017/11/20
 *
 * @author <a href="http://eregg.com">eregg</a>
 */
public interface NetDiskMapper {

    /**
     * 新建文件夹
     */
    Integer save(NetDisk netDisk);

    /**
     * 获取来自任务附件文件
     */
    List<NetDisk> listFilesByAnnex(Integer circleId);

    /**
     * 搜索
     */
    List<NetDisk> findFiles(NetDisk netDisk);

    /**
     * 获取子目录
     */
    List<NetDisk> findChild(NetDisk netDisk);

    /**
     * 文件夹重命名
     */
    Integer rename(NetDisk netDisk);

    /**
     * 获取文件详情
     */
    NetDisk fileDetails(Long id);

    /**
     * 获取文件夹详情
     */
    NetDisk folderDetails(Long id);


    /**
     * 创建分享
     */
    Integer createShare(NetDiskShare netDiskShare);

    /**
     * 插入分享文件
     */
    Integer insertShareFile(NetDiskShareFile netDiskShareFile);

    /**
     * 获取分享的网盘文件
     */
    List<NetDisk> findByShare(Long shareId);

    /**
     * @Author: yangrui
     * @Description: 圈子结点是否存在
     * @Date: 下午6:10 2017/11/21
     */
    Long exist(@Param("folderId") Integer folderId, @Param("circleId") Integer circleId);


    /**
     * 删除文件，文件夹
     *
     * @param
     * @return
     */
    Integer rm(List<Long> ids);

    /**
     * @Author: yangrui
     * @Description: 根据uuid删除文件
     * @Date: 下午8:14 2017/11/29
     */
    Integer removeWithUuid(@Param("uuid") String uuid);

    /**
     * 判断是否是文件
     *
     * @param
     * @return
     */
    Integer isFile(Long id);

    /**
     * 根据id获取文件（夹）
     *
     * @param id
     * @return
     */
    NetDisk findById(Long id);

    Long fileExist(@Param("circleId") Integer circleId, @Param("list") List<Long> list);

    /**
     * @Author: yangrui
     * @Description: 文件夹名称是否从存在
     * @Date: 下午3:36 2017/11/22
     */
    Long fileNameExist(@Param("circleId") Integer circleId, @Param("folderName") String folderName, @Param("node") Integer node);

    /**
     * @Author: yangrui
     * @Description: 根据节点显示文件夹列表
     * @Date: 下午2:53 2017/11/24
     */
    List<NetDiskFoldersByParentIdVO> foldersByParentId(@Param("circleId") Integer circleId, @Param("parentId") Long parentId);

    /**
     * @Author: yangrui
     * @Description: 根据节点显示文件夹列表-辅助sql-判断该圈子下是否存在该结点
     * @Date: 下午3:29 2017/11/24
     */
    Long existByParentId(@Param("circleId") Integer circleId, @Param("parentId") Long parentId);

    /**
     * @Author: yangrui
     * @Description: 文件移动至
     * @Date: 下午3:44 2017/11/24
     */
    Integer fileMove(@Param("loginUserId") Long loginUserId, @Param("parentId") Long parentId, @Param("id") Long id);

    /**
     * 获取已经删除的文件
     *
     * @param rmRule
     * @return
     */
    List<NetDisk> findDeleted(RmRule rmRule);

    /**
     * @Author: yangrui
     * @Description: 查看文件是否在来自任务附件中
     * @Date: 下午2:27 2017/11/28
     */
    FileFromVO findFileFrom(Long id);

    /**
     * @Author: yangrui
     * @Description: 根据文件ID查询commentId
     * @Date: 下午7:47 2017/11/29
     */
    Integer findCommentId(Long id);

    /**
     * 根据uui 获取 文件
     * @param uuid
     * @return
     */
    NetDisk getByUUID(String uuid);

    /**
     * 将文件状态置为可用
     * @param uuidList
     */
    Integer enabled(List<String> uuidList);

    /**
     * 根据UUIdlist批量获取文件
     * @param uuidList
     * @return
     */
    List<NetDisk> listByUUidList(List<String> uuidList);
}
